/**
 * 对于暴力的做法，时间复杂度特别高，双循环遍历，然后将区间字符串翻转，最后与原字符串进行对比，时间复杂度在
 * O(n^3)
 * 方式2：中心扩散算法，即选择一个或者两个点，从中间向外扩展，为了解决奇串和偶串的问题，我们需要考虑将奇串的中心拆分为两个
 */
#include <iostream>
using namespace std;

class Solution {
public:
  string longestPalindrome(string s) {
    // len 用于记录最长回文子串长度
    int len = 0, pos;
    for (int i = 0; i < s.length(); i++) {
      auto[l1, r1] = expandAroundCenter(s, i, i);     // 处理奇字符串
      auto[l2, r2] = expandAroundCenter(s, i, i + 1); // 处理偶字符串
      if (r1 - l1 + 1 > len) {
        pos = l1;
        len = r1 - l1 + 1;
      }
      if (r2 - l2 + 1 > len) {
        pos = l2;
        len = r2 - l2 + 1;
      }
    }
    return s.substr(pos, len);
  }

  pair<int, int> expandAroundCenter(const string &s, int l, int r) {
    while (l >= 0 && r < s.size() && s[l] == s[r]) {
      l--, r++;
    }
    return {l + 1, r - 1};
  }
};

int main() { return 0; }